
//当某个变量的值可以为null的时候，必须在声明处的类型后添加？来标识该引用可为空。
fun main(args: Array<String>) {
    println(parseInt("hh"));

    printProduct("6", "7")
    printProduct("a", "7")
    printProduct("a", "b")
    printProduct("8", "b")


}

//如果str的内容不是数字返回null，空值报错
//fun parseInt(str: String): Int? {
//    return str.toInt();
//}

//使用返回可空值的函数
fun parseInt(str: String): Int? {
    return str.toIntOrNull()
}

//fun printProduct(args1: String, args2: String) {
//    val x = parseInt(args1);
//    val y = parseInt(args2);
//
//    //直接使用 'x * y' 可能会报错，因为他们可能为null
//    if (x != null && y != null) {
//        //在空检测后 x和y会自动转为非空值（non-nullable）
//        println(x * y)
//    } else {
//        println("either '$args1' or '$args2' is not a number")
//    }
//}

fun printProduct(args1: String, args2: String) {
    val x = parseInt(args1);
    val y = parseInt(args2);

    if (x == null) {
        println("Wrong number format in args1: '${args1}'")
        return
    }
    if (y == null) {
        println("Wrong number format in args2: '${args2}'")
        return
    }

    //在空检测后，x 和 y 会自动转为非空值
    println(x * y)

}



